
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#include "funcoes_interface.h"
/*
#include "lista_ligada.h"
#include "estruturas.h"
#include "interface.h"
*/


int header(){
	printf("*************************************************\n");
	printf("*                                               *\n");
	printf("*                  FOURSQUARE@UM                *\n");
	printf("*                                               *\n");
	printf("*************************************************\n");
	printf("\n\n");

	return 0;
}


int footbar(){
	printf("\n\n");
	printf("*************************************************\n");
	return 0;
}


int interface_limpa(){

    system("clear");
	//fputs("\x1B[2J\n", stdout);
    fflush(stdout);
	return 0;
}


void menu_sair(){
	interface_limpa();
	header();
	printf("Obrigado por utilizar FOURSQUARE@UM\n");
	footbar();
	exit(0);

}

int adminPerfil(){
	char op;
	char input[50];
	interface_limpa();
	header();
	printf(" *    Administração Perfil   *\n\n");
	printf("[1] Nome : \n"); //printf("%s", getNome(*usr));
	printf("[2] Nickname : \n"); //printf("%s", getNick(*usr));
	printf("[3] E-mail : \n"); //printf("%s", getMail(*usr));
	printf("[4] Morada : \n"); //printf("%s", getMorada(*usr));
	printf("[5] Amigos : \n"); //printf("%s", toString(getAmigos(*usr)));
	printf("[6] Locais Visitados : \n"); //printf("%s", toString(getLocaisV(*usr)));
	printf("[7] Pontos totais : \n"); //printf("%s", getPontos(*usr));
	printf("[8] Pedidos Amizade Pendentes : \n"); //printf("amigo1, amigo2");
	printf("[9] Voltar : \n");
	footbar();

	fflush(stdin);
	getchar();
	op=getchar();
		switch (op){
			case '1' : printf("Novo nome: ");
				//fgets(input, 50, stdin);
				//setNome(*usr, input);
				printf("\nNome alterado para: %s", input);
				break;
			case '2' : printf("Novo nick: ");
				//fgets(input, 50, stdin);
				//setNick(*usr, input);
				printf("\nNick alterado para: %s", input);
				break;
			case '3' : printf("Novo e-mail: ");
				//fgets(input, 50, stdin);
				//setMail(*usr, input);
				printf("\nE-mail alterado para: %s", input);
				break;
			case '4' : printf("Nova morada: ");
				//fgets(input, 50, stdin);
				//setMorada(*usr, input);
				printf("\nMorada alterada para: %s", input);
				break;
			case '5' : printf("ADICIONAR AMIGO?");
			case '6' : printf("só consulta?");
			case '7' : printf("só consulta?");
			case '8' : printf("amigo1, amigo2");
			case '9' : menu_login(); break;
			default : printf("Insira uma opção válida!\n"); adminPerfil(); break;
		}

	return 0;
}

int menu_Perfil(){
	char op;
	interface_limpa();
	header();
	printf(" *    	 Perfil	   *\n\n");
	printf("Nome : \n"); //printf("%s", getNome(*usr));
	printf("Nickname : \n"); //printf("%s", getNick(*usr));
	printf("E-mail : \n"); //printf("%s", getMail(*usr));
	printf("Morada : \n"); //printf("%s", getMorada(*usr));
	printf("Amigos : \n"); //printf("%s", toString(getAmigos(*usr)));
	printf("Locais Visitados : \n"); //printf("%s", toString(getLocaisV(*usr)));
	printf("Pontos totais : \n"); //printf("%s", getPontos(*usr));
	printf("Pedidos Amizade Pendentes : \n"); //printf("amigo1, amigo2");
	printf("[1] Modificar dados \n");
	printf("[2] Voltar : \n");
	footbar();

	fflush(stdin);
	getchar();
	op=getchar();
		switch (op){
			case '1' : adminPerfil();break;
			case '2' : menu_login();break;
			default  : printf("Insira uma opção válida!\n"); menu_Perfil(); break;
		}
	return 0;
	}


int menu_registo(){

	char nome[20];
	char nickname[10];
	char mail[20];
	char password[10];
	char op1;

	interface_limpa();
	header();
	getchar();
	printf("Nome: (max 20)\n"); fgets(nome, 20, stdin);
	printf("Nickname: (max 10)\n"); fgets(nickname, 10, stdin);
	printf("E-Mail: (max 20)\n"); fgets(mail, 20, stdin);
	printf("Password: (ax 10)\n"); fgets(password, 10, stdin);

	//lligada_inserir(<#LLIGADA *lista#>, <#void *info#>)
	interface_limpa();
	header();
	printf("Confirma os seguintes dados no seu registo ?\n");
	printf("Nome: %s\n", nome);
	printf("Nickname: %s\n", nickname);
	printf("E-Mail: %s\n", mail);
	printf("Password: %s\n\n",password);
	printf("[1] Sim");
	printf("[2] Não");
	footbar();


	fflush(stdin);
	op1=getchar();
		switch (op1){
			case '1' : printf("Registo efectuado com sucesso! Pode agora fazer login.\n");menu_principal();break;
			case '2' : menu_registo();break;
			default : printf("Insira uma opção válida!\n"); menu_registo(); break;

	}
	interface_limpa();
	menu_principal();

	return 0;
}


int funcaoVoltar(){
	char op;

	interface_limpa();
	header();
	printf("[1] Efectuar novo cálculo");
	printf("[2] Voltar");menu_principal();
	footbar();

	fflush(stdin);
	op = getchar();
	if(op == '1') funcoesCalculo();
	else{
		if(op == '2') menu_principal();
		else{
			printf("Insira uma opção válida!\n");
			funcaoVoltar();}
	}

	return 0;
}


int funcoesCalculo(){
	char op2;
	char utiliz1[10];
	char utiliz2[10];
	//char str[10];
	int num;

	interface_limpa();
	header();
	printf(" *    Funções de Cálculo   *\n\n");
	printf("[1] Distancia Entre 2 utilizadores  \n");
	printf("[2] Amigo mais próxima  \n");
	printf("[3] Pesquisa Utilizador (NOME/NICKNAME)  \n");
	printf("[4] Amigos nas proximidades numa distância < d  \n");
	printf("[5] Afastamento máximo  \n");
	printf("[6] Mayor do Local Actual  \n");
	printf("[7] Voltar  \n");
	footbar();

	fflush(stdin);
	op2=getchar();
		switch (op2){
			case '1' : printf("Insira utilizador nº1:\n");
				fgets(utiliz1, 10, stdin);
				fflush(stdin);
				printf("Insira utilizador nº2:\n");
				fgets(utiliz2, 10, stdin);
				printf("A distância entre %s e %s é de ... km's",utiliz1,utiliz2)/*,calculo_distancia(utiliz1,utiliz2))*/;
				funcaoVoltar();
				break;
			case '2' : printf("O ... é o teu amigo mais próximo\n")/*,mais_proximo(perfil))*/;
				funcaoVoltar();
				break;
			case '3' : printf("Introduza o utilizador a pesquisar\n");
				//fgets(str, 10, stdin);
				//hash_table_procura(<#HASH_TABLE *#>, <#void *#>);
				printf("Cá está!\n");
				funcaoVoltar();
				break;
			case '4' : printf("Introduza uma distância: \n");
				scanf("%d", &num);
				//calculaDistancia(amigo, amigo, num);
				printf("O amigo TAL e TAL encontram-se a uma distância inferior a %d", num);
				funcaoVoltar();
				break;
			case '5' : //calcula_distancia_maxima(amigo, amigo);
				printf("O afastamento máximo entre o amigo TAL é de TANTOS km's");break;
			case '6' : printf("Introduza um local \n");
				//fgets(str, 10, stdin);
				//breadthSearchQueue(str, seq[], nv);
				printf("O mayor é: \n");
				funcaoVoltar();
				break;
			case '7' : menu_principal(); break;
			default : printf("Insira uma opção válida!\n"); funcoesCalculo(); break;

	}

	return 0;
}

int interface_login_nick(){
	char op1[30];
	char a[1];
	a[0] = 1;
	interface_limpa();
	header();
	fflush(stdin);
	printf("Introduza o seu nickname: \n");
	fgets(op1, 30, stdin);
	if(strcmp(op1, a) == 0){
		//if(hash_table_procura(<#HASH_TABLE *#>, op1) != NULL){
		printf("O login foi efectuado com sucesso!\n");
		menu_Perfil();}
	//}
	//else{
	else{
		printf("Utilizador não encontrado!\n");
		menu_login();}
	//}
	return 0;
}

int interface_login_mail(){
	char op1[30];
	char a[1];
	a[0] = 1;
	interface_limpa();
	header();
	fflush(stdin);
	printf("Introduza o seu e-mail: \n");
	fgets(op1, 50, stdin);
	if(strcmp(op1, a) == 0){
		//if(hash_table_procura(<#HASH_TABLE *#>, op1) != NULL){
		printf("O login foi efectuado com sucesso!\n");
		menu_Perfil();}
	//}
	//else{
	else{
		printf("Utilizador não encontrado!\n");
		menu_login();}
	//}
	return 0;
}



int salvarDados(){

	/*O programa deve permitir que em qualquer momento se possa guardar em
	 ficheiro a informação existente em memória sobre os utilizadores, ligações
	 entre eles e mensagens trocadas, lugares visitados, etc. A gravação deve ser
	 feita da forma mais optimizada possível e deve permitir que o estado que foi
	 gravado seja recuperado novamente. */

	printf("FALTA ISTO\n");

	return 0;
}

int importarDados(){

	printf("FALTA ISTO\n");

	return 0;

}

int menu_login(){
	char op3;

	interface_limpa();
	header();
	printf(" *         Login         *\n\n");
	printf("[1] Login por nickname \n");
	printf("[2] Login por e-mail \n");
	printf("[3] Voltar \n");
	footbar();
	fflush(stdin);
	op3= getchar();

	switch (op3){
		case '1' : interface_login_nick(); break;
		case '2' : interface_login_mail(); break;
		case '3' : menu_principal(); break;
		default : printf("Insira uma opção válida!\n"); menu_login(); break;
	}
	return 0;
}

int menu_principal(){
	char op4;
	interface_limpa();
	header();
	printf("[1] Login \n");
	printf("[2] Registar \n");
	printf("[3] Funções Cálculo \n");
	printf("[4] Salvar Dados Base de dados \n");
	printf("[5] Importar Dados Base de dados \n");
	printf("[6] Sair \n");
	footbar();

	fflush(stdin);
	op4= getchar();

	switch (op4){
		case '1' : printf("OPCAO 1\n"); menu_login(); break;
		case '2' : printf("OPCAO 2\n"); menu_registo(); break;
		case '3' : funcoesCalculo();break;
		case '4' : salvarDados();break;
		case '5' : importarDados();break;
		case '6' : menu_sair(); return 0;
		default: printf("Insira uma opção válida!\n"); menu_principal(); break;
	}

	return 0;

}